/**
 * @file   1023.cpp
 * @author Shuang Hu <hsmath@ubuntu>
 * @date   Thu Apr 29 22:25:37 2021
 * 
 * @brief  PAT advanced problem 1023
 * 
 * 
 */
#include<iostream>
#include<string>
#include<vector>
#include<queue>
using namespace std;
int main(){
    string s;
    cin>>s;//Input the string
    vector<int> origin;
    queue<int> prodtwo;
    vector<int> store;
    int M1[10]={0};
    int M2[10]={0};
    for(int i=0;i<s.length();i++){
	int d;
	d=s[i]-'0';
	origin.push_back(d);
    }
    bool ifjinwei=false;//add one or not
    for(int i=origin.size()-1;i>=0;i--){
	int d=origin[i]*2;
	if(ifjinwei==true){
	    d=d+1;
	}
	if(d>=10){
	    d=d-10;
	    ifjinwei=true;//jinwei~
	}else{
	    ifjinwei=false;
	}
	prodtwo.push(d);
    }
    if(ifjinwei==true){
	prodtwo.push(1);
    }
    for(int i=0;i<origin.size();i++){
	M1[origin[i]]++;
    }
    while(prodtwo.empty()==false){
	M2[prodtwo.front()]++;
	store.push_back(prodtwo.front());
	prodtwo.pop();
    }
    bool flag=true;
    for(int i=0;i<10;i++){
	if(M1[i]!=M2[i]){
	    cout<<"No"<<endl;
            flag=false;
	    break;
	}
    }
    if(flag==true){
	cout<<"Yes"<<endl;
    }
    for(int i=store.size()-1;i>=0;i--){
	cout<<store[i];
    }
    cout<<endl;
}
